function [model,reactionS,UBchange,exprNew]=Ub_update_withFC(model00,meta_exp_FC,meta_exp_FDR,meta_exp_locus,expr,ParsedGPR,Prxn)

genelocus=floor(str2double(model00.genes));
genestateOLD=zeros(size(genelocus));
genestateNEW=zeros(size(genelocus));
geneFC=zeros(size(genelocus));


for i=1:size(expr.Locus,1)
    genestateOLD(find(genelocus==expr.Locus(i),1))=expr.Data(i);
end

for i=1:size(meta_exp_locus,1) %state change
    genestateNEW(find(genelocus==meta_exp_locus(i),1))=sign(meta_exp_FC(i))*meta_exp_FDR(i);
    geneFC(find(genelocus==meta_exp_locus(i),1))=meta_exp_FC(i);
end

for i=1:size(genelocus,1)
    if abs(geneFC(i))>1
        newstate=2*genestateNEW(i)+genestateOLD(i);
    else
        newstate=genestateNEW(i)+genestateOLD(i);
    end
    newstate=sign(newstate);
    genestateNEW(i)=newstate;    
end

ProcessGPR_B=zeros(size(ParsedGPR));
ProcessGPR_OB=zeros(size(ParsedGPR));
ProcessGPR_FC=zeros(size(ParsedGPR));

for i=1:size(ParsedGPR,1)
    for j=1:size(ParsedGPR,2)
        if isnan(ParsedGPR(i,j))
            ProcessGPR_B(i,j)=999;
            ProcessGPR_OB(i,j)=999;
            ProcessGPR_FC(i,j)=999;
        else
            geneid=ParsedGPR(i,j);
            ProcessGPR_B(i,j)=genestateNEW(find(genelocus==geneid,1));
            ProcessGPR_OB(i,j)=genestateOLD(find(genelocus==geneid,1));
            ProcessGPR_FC(i,j)=geneFC(find(genelocus==geneid,1));
        end        
    end
end

ListGPR=min(ProcessGPR_B,[],2);
ListGPRFC=min(ProcessGPR_FC,[],2);
ListGPR_O=min(ProcessGPR_OB,[],2);

ProcessList=zeros(size(model00.ub,1));
ProcessList_O=zeros(size(model00.ub,1));
ProcessListFC=zeros(size(model00.ub,1));
posi=ones(size(model00.ub,1));
for i=1:size(ListGPR,1) % gene states for each reaction
    ind=Prxn(i);
    ProcessList(ind,posi(ind))=ListGPR(i);
    ProcessList_O(ind,posi(ind))=ListGPR_O(i);
    ProcessListFC(ind,posi(ind))=ListGPRFC(i);
    posi(ind)=posi(ind)+1;   
end

reactionS=sum(ProcessList,2)-sum(ProcessList_O,2);
UBchange=zeros(size(reactionS,1),1);
newUB=zeros(size(reactionS,1),1);
for i=1:size(reactionS,1)
    if reactionS(i)>0
        UBchange(i)=max(ProcessListFC(i,:),[],2);
    else
        if reactionS(i)<0
            UBchange(i)=max(ProcessListFC(i,ProcessListFC(i,:)<0),[],2);
        end
    end    
    newUB(i)=model00.ub(i)*(2^(UBchange(i)));
end

model=model00;
model.ub=newUB;

exprNew=expr;
exprNew.Locus=genelocus;
exprNew.Data=genestateNEW;
return;


